<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Funciones de cadenas
 * 
 * 
 */
// ------------------------------------------------------------------------

/**
 * intable
 * Convierte array en una tabla
 *
 * @author Edgardo Segura 
 * @example $arrray['string'] = 'Tag'; $arrray['integer'] = '123'; echo intable($array,'Tipo dato','Contenido'); 
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	array
 * @return	string
 */
if ( ! function_exists('intable'))
{
	function intable($array,$column1='',$column2='')
	{	
		$resultado[]='<table class="intable">';
		
		if($column1!='' and $column2=='')
		{
			$resultado[]='<thead><tr><td colspan="2">'.$column1.'</td></tr></thead>';
		}
		
		if($column1!='' and $column2!='')
		{
			$resultado[]='<thead><tr><td class="it_col1">'.$column1.'</td><td class="it_col2">'.$column2.'</td></tr></thead>';
		}
		
		$resultado[]='<tbody>';
		
		foreach ($array as $actual => $valor)
		{
			$resultado[]='<tr><td class="it_col1">'.$actual.'</td><td class="it_col2">'.$valor.'</td></tr>';
		}
		
		$resultado[]='</tbody>';		
		$resultado[]='</table>';
		
		return implode('',$resultado);
	}
}
// ------------------------------------------------------------------------

/**
 * Stick
 * Devuelde una cadena con el contenido de  array
 *
 * @author Edgardo Segura 
 * @example $arrray[] = 'Tag: '; $arrray[] = 'TEST'; echo stick($array); (RESULTADO) Tag: TEST 
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	array
 * @return	string
 */
if ( ! function_exists('stick'))
{
	function stick($array)
	{		
		return implode('',$array);
	}
}
// ------------------------------------------------------------------------

/**
 * Per_item
 * Agrega a los elementos de una array un string al inicio y final 
 * 
 * @author Edgardo Segura 
 * @example $array[]='Casas'; $array[]='Quintas'; echo per_item($array,'(','),'); (Resultado) (Casas),(Quintas),
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	array, string, string
 * @return	string
 */
if ( ! function_exists('per_item'))
{
	function per_item($array,$start,$end)
	{		
		foreach ($array as $actual)
		{
			$temp[]=$start.$actual.$end;
		}
		return implode('',$temp);
	}
}
// ------------------------------------------------------------------------

/**
 * First_word
 * Extrae la primer palabra de un string
 * 
 * @author Edgardo Segura 
 * @example $string='Nuestro sistema solar'; echo first_word($string); (Resultado) Nuestro
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string
 * @return	string
 */
if ( ! function_exists('first_word'))
{
	function first_word($string){
		$patron = "/^[a-z|A-Z]+$/";
		$string = trim($string);
		
		$temp=array();
		
		for($i=0;$i<strlen($string);$i++)
		{
				if(preg_match($patron, $string[$i]))
				{
					$temp[]= $string[$i];
				}
				else
				{
					break;
				}
			}		
		
		return implode('',$temp);
	}
}
// ------------------------------------------------------------------------

/**
 * kill
 * Elimina de una string otro string dado en $search insencible a mayusculas y minusculas
 * 
 * @author Edgardo Segura 
 * @example $string='1 2 3 4 5'; echo kill($string,' '); (Resultado) 12345
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string
 * @return	string
 */
if ( ! function_exists('kill'))
{
	function kill($search,$string)
	{				
		return str_ireplace($search,'',$string);
	}
}
// ------------------------------------------------------------------------

/**
 * Cortar_y_decir

 * Corta un texto a N caracteres muestra texto como "Leer mas..." con link
 * 
 * @author Edgardo Segura 
 * @example
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string
 * @return	string
 */
if ( ! function_exists('cortar_y_decir'))
{
	function cortar_y_decir($string,$caracteres,$decir=NULL,$link=NULL)
	{		
		$result = substr($string,0,$caracteres);
		
		for($i=strlen($result);$i>0;$i--)
		{
			if($result[$i]==' ')
			{
				if($decir!=NULL and $link!=NULL)
				{
					$result = substr($result,0,$i).'<a href="'.$link.'">'.$decir.'</a>';	
				}
				else
				{
					$result = substr($result,0,$i).'...';
				}				
				break;
			}			
		}
		
		return $result;
	}
}
// ------------------------------------------------------------------------

/**
 * Detect_source
 * Detecta recursos en template para ser reeplazados por otras direcciones
 * 
 * @author Edgardo Segura 
 * @example
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string
 * @return	string
 */
if ( ! function_exists('detect_source'))
{
	function detect_source($html,$url)
	{		
		$str=preg_replace('#(href|src)="([^:"]*)("|(?:(?:%20|\s|\+)[^"]*"))#','$1="'.$url.'$2$3',$html);		
		return $str;
	}
}
// ------------------------------------------------------------------------

/**
 * Fucfirst
 * Pasa a mayusculas el primer caracter de a-z encontrado, resolviendo: '!este tipo de cosas' > !Este tipo de cosas
 *
 * @author Edgardo Segura 
 * @example $string='!este tipo de cosas'; echo fucfirst($string); (Resultado) !Este tipo de cosas
 * @see
 * @link {}
 * @since 16/02/2009
 * @version 
 * @access	public
 * @param	string
 * @return	string
 */
if ( ! function_exists('fucfirst'))
{
	function fucfirst($string)
	{
		$patron = "/^[a-z|A-Z]+$/";
		if (preg_match($patron, $string[0]))
		{	
			$resultado = ucfirst($string);
		}else{
			for($i=0;$i<strlen($string);$i++){
				if(preg_match($patron, $string[$i]))
				{
					$resultado = substr($string,0,$i-1).strtoupper($string[$i]).substr($string,($i+1));
					break;	
				}			
			}		
		}
		return $resultado;
	}
}
// ------------------------------------------------------------------------

/**
 * Left
 * Corta cadena hasta el numero de caracteres dados, contando desde la IZQUIERDA
 * 
 * @author Edgardo Segura 
 * @example $string='ABCDEFG'; echo left($string,4); (Resultado) ABCD
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, int
 * @return	string
 */
if ( ! function_exists('left'))
{
	function left($string,$cant)
	{
		return substr($string,0,$cant);
	}
}
// ------------------------------------------------------------------------

/**
 * Right
 * Corta cadena hasta el numero de caracteres dados, contando desde la DERECHA
 * 
 * @author Edgardo Segura 
 * @example $string='ABCDEFG'; echo right($string,4); (Resultado) DEFG
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, int
 * @return	string
 */
if ( ! function_exists('right'))
{
	function right($string,$cant)
	{
		return substr($string,strlen($string)-$cant);
	}
}
// ------------------------------------------------------------------------

/**
 * Since
 * Corta cadena desde la primer aparicion de parametro SINCE hasta el final
 * 
 * @author Edgardo Segura 
 * @example $string='abcdef'; echo since($string,'c'); (Resultado) def
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, string
 * @return	string
 */
if ( ! function_exists('since'))
{
	function since($string,$since)
	{	
		return substr($string,strpos($string,$since)+strlen($since));	
	}
}
// ------------------------------------------------------------------------

/**
 * Until
 * Corta cadena desde el principio hasta la primer aparicion de parametro UNTIL
 * 
 * @author Edgardo Segura 
 * @example $string='abcdef'; echo until($string,'c'); (Resultado) ab
 * @see
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, string
 * @return	string
 */
if ( ! function_exists('until'))
{
	function until($string,$until)
	{
		return substr($string,0,strpos($string,$until));	
	}
}
// ------------------------------------------------------------------------

/**
 * Since_until

 * Corta cadena desde la primer aparicion de SINCE hasta la primer aparicion del parametro UNTIL
 * 
 * @author Edgardo Segura 
 * @example $string='abcdef'; echo since_until($string,'a','e'); (Resultado) bcd
 * @see since; until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, string, string
 * @return	string
 */
if ( ! function_exists('since_until'))
{
	function since_until($string,$since,$until)
	{
		$since_string=substr($string,strpos($string,$since)+strlen($since));
		return substr($since_string,0,strpos($since_string,$until));	
	}
}
// ------------------------------------------------------------------------

/**
 * Since_final

 * Corta cadena desde la ultima aparicion de SINCE hasta el final de la cadena
 * 
 * @author Edgardo Segura 
 * @example $string='abcdaefg'; echo since_final($string,'a'); (Resultado) efg
 * @see since; until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @access	public
 * @param	string, string
 * @return	string
 */
if ( ! function_exists('since_final'))
{
	function since_final($string,$since)
	{		
		return substr($string,strrpos($string,$since)+1);	
	}
}
// ------------------------------------------------------------------------

/**
 * Until_final
 * Corta cadena desde el principio hasta la ultima aparicion de UNTIL
 * 
 * @author Edgardo Segura 
 * @example $string='abcdaefg'; echo until_final($string,'a'); (Resultado) abcd
 * @see until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, string
 * @return	string
 */
if ( ! function_exists('until_final'))
{
	function until_final($string,$until)
	{		
		return substr($string,0,strrpos($string,$until));	
	}
}
// ------------------------------------------------------------------------

/**
 * Substr_exist

 * Comprueba la existencia de una cadena dentro de otra N veces; 1 default. Sencible a mayusculas y minusculas
 * 
 * @author Edgardo Segura 
 * @example $string='abcdaefg'; echo substr_exist($string,'a'); (Resultado) TRUE
 * @see until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, string, int
 * @return	true | false
 */
if ( ! function_exists('substr_exist'))
{
	function substr_exist($string,$search,$appears=1)
	{	
		if(substr_count($string,$search)>=$appears)
		{
			return true;
		}
		else
		{
			return false;
		}	
	}
}
// ------------------------------------------------------------------------

/**
 * Substr_hexist

 * Comprueba la existencia de una cadena dentro de otra N veces; 1 default. Insencible a mayusculas y minusculas
 * 
 * @author Edgardo Segura 
 * @example $string='abcdaefg'; echo substr_exist($string,'A'); (Resultado) TRUE
 * @see until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string, string, int
 * @return	true | false
 */
if ( ! function_exists('substr_hexist'))
{
	function substr_hexist($string,$search,$appears=1)
	{	
		if(substr_count(strtolower($string),strtolower($search))>=$appears)
		{
			return true;			
		}
		else
		{
			return false;
		}	
	}
}
// ------------------------------------------------------------------------

/**
 * Render

 * Retorna una cadena de texto, habiendo reemplazado los tags {nombre_variable} con 
 * los valores dentro de un array con clave del mismo nombre.
 * 
 * @author Edgardo Segura 
 * @example $string='Actividad: {actividad}'; $array['actividad']='Profesor'; echo render($string,$array); (Resultado) Actividad: Profesor
 * @see until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string , array
 * @return	string
 */	
if ( ! function_exists('render'))
{
	function render($string_to_view,$array_values,$clean=TRUE)
	{						
		preg_match_all("#{([a-z|A-Z|0-9|/_|/.]+)}#", $string_to_view, $claves);
			
		foreach($claves[1] as $actual){
			
			if($array_values[$actual]!=null)
			{
				$string_to_view=str_replace('{'.$actual.'}',$array_values[$actual],$string_to_view);
			}
			else{
				if($clean==TRUE)
				{
					$string_to_view=str_replace('{'.$actual.'}','',$string_to_view);	
				}								
			}
		}		
		return $string_to_view;		
	}
}

// ------------------------------------------------------------------------

/**
 * Kill_tags

 * Retorna una cadena de texto, habiendo reemplazado los tags {nombre_variable} con 
 * los valores dentro de un array con clave del mismo nombre.
 * 
 * @author Edgardo Segura 
 * @example $string='Actividad: {actividad}'; echo kill_tags($string); (Resultado) Actividad: 
 * @see until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string
 * @return	string
 */	
if ( ! function_exists('kill_tags'))
{
	function kill_tags($string)
	{	
		preg_match_all("#{([a-z|0-9|/_|/.]+)}#", $string, $claves);			
		$array = $claves[1];
		
		foreach($array as $actual)
		{
			$string = str_replace('{'.$actual.'}','',$string);		
		}			
		return $string;	
	}
}

// ------------------------------------------------------------------------

/**
 * Extraer_claves

 * Retorna un array con las cadenas de texto encontradas dentro de llaves {}
 * 
 * @author Edgardo Segura 
 * @example $string='Actividad: {actividad}'; extraer_claves($string); (Resultado) array[0]='actividad' 
 * @see until
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string
 * @return	array
 */
if ( ! function_exists('extraer_claves'))
{
	function extraer_claves($string)
	{
		preg_match_all("#{([a-z|0-9|/_|/.]+)}#", $string, $claves);			
		return $claves[1];
	}
}
// ------------------------------------------------------------------------

/**
 * Block

 * Renderea bloques en un template con el contenido de un array
 * 
 * @author Edgardo Segura 
 * @example
 * @see inject; since; until; since_until; render
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string , string, array, TRUE | FALSE, TRUE | FALSE 
 * @return	string
 */
if ( ! function_exists('block'))
{
	function block($template,$name_block,$array_values,$pre_render=FALSE,$inject=TRUE)
	{				
		preg_match_all("#\|([a-z|A-Z|0-9|/_|/.]+)\|#", $template, $claves);
			
		foreach($claves[1] as $actual)
		{
			if(substr_exist($actual,$name_block))
			{
				$block_keys[] = '|'.$actual.'|';
			}
		}
				
		$template_actual = since_until($template,$block_keys[0],$block_keys[1]);
				
		if($pre_render!=FALSE)
		{
			$template_actual = render($template_actual,$pre_render,'especificamente');
		}

		if(count($array_values)>0)
		{
			foreach($array_values as $actual)
			{
				$resultado[] = render($template_actual,$actual);
			}	
		}
		else
		{
			$resultado[] = '';
		}		

		if($inject==true)
		{
			return inject(implode('',$resultado),$template,$block_keys[0],$block_keys[1]);		
		}
		else
		{
			return implode('',$resultado);	
		}		
	}
}
// ------------------------------------------------------------------------

/**
 * Inject

 * Retorna una cadena de texto con otra insertada en DESDE HASTA dados
 * DESDE y HASTA deben ser claves en la cadena de texto y estar a la izquierda y derecha respectivamente
 *
 * @author Edgardo Segura 
 * @example
 * @see inject; since; until; since_until; render
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string , string, string, string
 * @return	string
 */
if ( ! function_exists('inject'))
{
	function inject($contenido,$en,$desde,$hasta)
	{		
		$aparicion1 = strpos($en,$desde)-1;
		$aparicion2 = strpos($en,$hasta)+strlen($hasta)+1;	
		
		$principio = substr($en,0,$aparicion1);
	
		$final = substr($en,$aparicion2);
		
		return $principio.$contenido.$final;	
	}
}
// ------------------------------------------------------------------------

/**
 * Inject_since
 * Retorna una cadena de texto con otra insertada en DESDE HASTA (inmediatamente consecutivo) 
 * 
 * @author Edgardo Segura 
 * @example
 * @see inject; since; until; since_until; render
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string , string, string, string
 * @return	string
 */
if ( ! function_exists('inject_since'))
{
	function inject_since($contenido,$en,$desde,$hasta)
	{		
		$aparicion1 = strpos($en,$desde)-1;
		$aparicion2 = substr($en,$aparicion1+strlen($desde)+1);
		$aparicion2 = $aparicion1+strlen($desde)+strpos($aparicion2,$hasta)+1;
		
		$principio = substr($en,0,$aparicion1+strlen($desde)+1);
		
		$final = substr($en,$aparicion2);
		
		return $principio.$contenido.$final;	
	}
}
// ------------------------------------------------------------------------

/**
 * Strclean
 * 
 * Limpia string
 * 
 * @author Edgardo Segura 
 * @example $string=' aBcDEf '; echo strclean($string); (Resultado) abcdef 
 * @see 
 * @link {}
 * @since 16/02/2009
 * @version
 * @access	public
 * @param	string
 * @return	string
 */
if ( ! function_exists('strclean'))
{
	function strclean($str)
	{
		return strtolower(trim($str));
	}
}
// ------------------------------------------------------------------------

/* End of file string_my_helper.php */
/* Location: ./system/application/helpers/string_my_helper.php */